<!--!
       groups    - a dict, where:
                     key       - is the value shared by all results in this group
                     value     - is the list of corresponding tickets

       headers   - a sequence of header structure:
                     .name     - field name for this header
                     .label    - what to display for this header

       fields    - dict of field name to field structure:
                     .label    - field label

       query     - the actual Query instance used to perform the query

-->
<div xmlns="http://www.w3.org/1999/xhtml"
     xmlns:py="http://genshi.edgewall.org/"
     xmlns:i18n="http://genshi.edgewall.org/i18n"
     xmlns:xi="http://www.w3.org/2001/XInclude">
  <h2 class="report-result" py:if="paginator.has_more_pages">
    Results <span class="numresults">(${paginator.displayed_items()})</span>
  </h2>
  <xi:include py:if="paginator.show_index" href="page_index.html" />
  <py:def function="group_heading(groupname, results)">
    <h2 class="report-result" py:if="groupname is not None">
      ${fields[query.group].label}:
      ${query.group in ['owner', 'reporter'] and authorinfo(groupname) or groupname or _('None')}
      <span class="numrows">(${ngettext('%(num)s match', '%(num)s matches', len(results))})</span>
    </h2>
  </py:def>
  <py:def function="column_headers()">
    <tr class="trac-columns">
      <th py:for="header in headers"
          class="$header.name${query.order == header.name and (query.desc and ' desc' or ' asc') or ''}">
        <?python asc = _('(ascending)'); desc = _('(descending)') ?>
        <a title="${_('Sort by %(col)s %(direction)s', col=header.label,
                      direction=(query.order == header.name and not query.desc and desc or asc))}"
           href="$header.href">${header.label}</a>
      </th>
    </tr>
  </py:def>
  ${groups and group_heading(*groups[0]) or None}
  <table class="listing tickets">
    <thead py:strip="group_index">
      ${column_headers()}
    </thead>
    <py:for each="group_index, (groupname, results) in enumerate(groups)">
      <tbody py:if="group_index">
        <tr py:if="groupname is not None" class="trac-group">
          <th colspan="${len(headers)}">
            ${group_heading(groupname, results)}
          </th>
        </tr>
        ${column_headers()}
      </tbody>
      <tbody>
        <tr py:if="not results" class="even">
          <td colspan="${len(headers)}">
            No tickets found
          </td>
        </tr>
        <py:for each="idx, result in enumerate(results)">
          <py:with vars="ticket_context = context('ticket', result.id)">
            <py:if test="'TICKET_VIEW' in perm(ticket_context.resource)">

              <tr class="${idx % 2 and 'odd' or 'even'} prio${result.priority_value}${
                'added' in result and ' added' or ''}${
                'changed' in result and ' changed' or ''}${
                'removed' in result and ' removed' or ''}">
                <py:for each="idx, header in enumerate(headers)" py:choose="">
                  <py:with vars="name = header.name; value = result[name]">
                    <td py:when="name == 'id'" class="id"><a href="$result.href" title="View ticket"
                        class="${classes(closed=result.status == 'closed')}">#$result.id</a></td>
                    <td py:otherwise="" class="$name" py:choose="">
                      <a py:when="name == 'summary'" href="$result.href" title="View ticket">$value</a>
                      <py:when test="isinstance(value, datetime)">${dateinfo(value)}</py:when>
                      <py:when test="name == 'reporter'">${authorinfo(value)}</py:when>
                      <py:when test="name == 'cc'">${format_emails(ticket_context, value)}</py:when>
                      <py:when test="name == 'owner' and value">${authorinfo(value)}</py:when>
                      <py:when test="name == 'milestone'"><a py:if="value" title="View milestone" href="${href.milestone(value)}">${value}</a></py:when>
                      <py:when test="header.wikify">${wiki_to_oneliner(ticket_context, value)}</py:when>
                      <py:otherwise>$value</py:otherwise>
                    </td>
                  </py:with>
                </py:for>
              </tr>

              <py:with vars="result_rows = [t for t in row if result[t]]">
                <tr py:if="result_rows" class="fullrow">
                  <td colspan="${len(headers)}">
                    <p class="meta" i18n:msg="author, date">Reported by <strong>${authorinfo(result.reporter)}</strong>,
                      ${dateinfo(result.time)} ago.</p>
                  </td>
                </tr>
                <py:choose>
                  <tr py:when="ticket_context.resource in context" class="fullrow">
                    <td colspan="${len(headers)}">
                      <p class="meta"><em>(this ticket)</em></p>
                    </td>
                  </tr>
                  <tr py:otherwise="" py:for="r in result_rows" class="fullrow">
                    <th class="meta">${fields.get(r, {'label': r or 'none'}).label}</th>
                    <td colspan="${len(headers)-1}" xml:space="preserve">
                      ${wiki_to_html(ticket_context, result[r])}
                    </td>
                  </tr>
                </py:choose>
              </py:with>
            </py:if>
          </py:with>
        </py:for>
        <tr py:if="group_index == len(groups)-1 and last_group_is_partial">
          <td colspan="${len(headers)}">
            <i>(more results for this group on next page)</i>
          </td>
        </tr>
      </tbody>
    </py:for>
  </table>
  <xi:include py:if="paginator.show_index" href="page_index.html" />
</div>


